﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using OpenCvSharp;

namespace RecognitionNumbers
{
    public class Capture
    {
        public OpenCvSharp.CvCapture capture;
        private string url_;
        private int camera_;
        public IplImage output;
        НастройкиПоискНомера настройкиПоискНомера; НастройкиПоискаСимволов настройкиПоискСимволов; List<MatrixSymbol> матрицыСимволов;
        Motion motion;

        public string url
        {
            get
            {
                return url_;
            }
            set
            {
                if (File.Exists(value))
                {
                this.url_ = value;
                camera_ = -1;
                capture = OpenCvSharp.Cv.CreateFileCapture(value);
                }
            }
        }
        public int camera
        {
            get
            {
                return camera_;
            }
            set
            {
                camera_= value;
                this.url_ = "";
                capture = OpenCvSharp.Cv.CreateCameraCapture(camera_);
            }
        }


        public Capture(string url, НастройкиПоискНомера настройкиПоискНомера, НастройкиПоискаСимволов настройкиПоискСимволов, List<MatrixSymbol> матрицыСимволов)
        {
            this.url=url;
            this.настройкиПоискНомера = настройкиПоискНомера;
            this.настройкиПоискСимволов = настройкиПоискСимволов;
            this.матрицыСимволов = матрицыСимволов;
            motion = new Motion(capture.QueryFrame());
        }

        public Capture(int camera, НастройкиПоискНомера настройкиПоискНомера, НастройкиПоискаСимволов настройкиПоискСимволов, List<MatrixSymbol> матрицыСимволов)
        {
            this.camera = camera;
            this.настройкиПоискНомера = настройкиПоискНомера;
            this.настройкиПоискСимволов = настройкиПоискСимволов;
            this.матрицыСимволов = матрицыСимволов;
            motion = new Motion(capture.QueryFrame());
        }

        public List<Number> go(bool education)
        {
            output = null;
            List<Number> l = new List<Number>(); ;
            SearchAndRecognition s = new SearchAndRecognition(настройкиПоискНомера, настройкиПоискСимволов, матрицыСимволов);
            IplImage i = capture.QueryFrame();
            if (i != null)
            {
              
                 l = s.go(new Image(i), education);
                
                output = s.output;
            }
            return l;
            
        }

        public List<Number> go(bool education, bool motion)
        {
            output = null;
            List<Number> l = new List<Number>(); ;
            SearchAndRecognition s = new SearchAndRecognition(настройкиПоискНомера, настройкиПоискСимволов, матрицыСимволов);
            IplImage i = capture.QueryFrame();
            if (i != null)
            {
                if (!motion)
                {
                    l = s.go(new Image(i), education);
                }
                else
                {
                    this.motion.search(i);
                    l = s.go(new Image(this.motion.output), education,this.motion.coordinatesRectangle);
                }

                output = s.output;
            }
            return l;

        }

        public IplImage frame
        {
            get
            {
                return capture.QueryFrame();
            }
        }
    }
}
